/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package projetluc;

import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

/**
 *
 * @author Lone_Wolf
 */
public class EcranConnexion extends JPanel {

    ArrayList<Employe> comptes;
    Fenetre fenetre;
    JLabel lblUtilisateur;
    JLabel lblMotPasse;
    JLabel lblErreur;
    JTextField txtUtilisateur;
    JPasswordField txtMotPasse;
    JButton btnConnecter;
    JButton btnQuitter;
    Dimension dimension1;
    JPanel pnlUtilisateur;
    JPanel pnlMotPasse;
    JPanel pnlErreur;
    JPanel pnlOptions;
    Employe utilCourant;

    /**
     * Construit l'écran de connexion.
     * @param fenetre
     * nécessaire à l'affichage et à la navigation entre les différents écrans du programme.
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public EcranConnexion(Fenetre fenetre) throws IOException, ClassNotFoundException {

        this.fenetre = fenetre;
        this.setLayout(new GridLayout(5, 1));
        dimension1 = new Dimension(150, 20);

        pnlUtilisateur = new JPanel();
        pnlMotPasse = new JPanel();
        pnlErreur = new JPanel();
        pnlOptions = new JPanel();

        lblUtilisateur = new JLabel("Nom d'Utilisateur :");
        lblMotPasse = new JLabel("Mot de Passe :       ");
        txtUtilisateur = new JTextField();
        txtMotPasse = new JPasswordField();
        btnConnecter = new JButton("Se Connecter!");
        btnConnecter.addActionListener(new GererEvenements());
        btnQuitter = new JButton("Quitter");
        btnQuitter.addActionListener(new GererEvenements());
        lblErreur = new JLabel("Le nom d'utilisateur ou le mot de passe est incorrect");
        lblErreur.setForeground(Color.red);
        lblErreur.setVisible(false);

        txtUtilisateur.setPreferredSize(dimension1);
        txtMotPasse.setPreferredSize(dimension1);
        txtUtilisateur.addKeyListener(new GererTouches());
        txtMotPasse.addKeyListener(new GererTouches());

        pnlUtilisateur.add(lblUtilisateur);
        pnlUtilisateur.add(txtUtilisateur);
        pnlMotPasse.add(lblMotPasse);
        pnlMotPasse.add(txtMotPasse);
        pnlOptions.add(btnQuitter);
        pnlOptions.add(btnConnecter);
        pnlErreur.add(lblErreur);

        this.add(pnlUtilisateur);
        this.add(pnlMotPasse);
        this.add(pnlErreur);
        this.add(pnlOptions);

        fenetre.setTitle("Connexion");
        fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenetre.setVisible(true);
    }

    /**
     * gère les actions effectuées sur les composantes concernées de cet écran.
     */
    class GererEvenements implements ActionListener {

        /**
         * permet de gérer les clics de boutons.
         * @param ae
         * permet d'itentifier la source de l'action
         */
        public void actionPerformed(ActionEvent ae) {

            if (ae.getSource() == btnConnecter) {
                String utilisateur = txtUtilisateur.getText();
                String motPasse = txtMotPasse.getText();
                if (ValiderCompte(utilisateur, motPasse)) {
                    lblErreur.setVisible(false);
                    try {
                        fenetre.connectionValide(utilCourant);
                    } catch (IOException ex) {
                        Logger.getLogger(EcranConnexion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(EcranConnexion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } else {
                    lblErreur.setVisible(true);
                }
            } else if (ae.getSource() == btnQuitter) {
                System.exit(0);
            }
        }

        /**
         * permet de vérifier que l'utilisateur existe et que son mot de passe concorde
         * @param utilisateur
         * le nom d'utilisateur entré
         * @param motPasse
         * le mot de passe entré
         * @return
         */
        public boolean ValiderCompte(String utilisateur, String motPasse) {
            boolean utilisateurExiste = false;
            boolean motPasseExiste = false;
            boolean valide = false;

            for (int i = 0; i < fenetre.arEmploye.size(); i++) {
                if (fenetre.arEmploye.get(i).getNom().equals(utilisateur)) {
                    utilisateurExiste = true;
                    if (fenetre.arEmploye.get(i).getMotPasse().equals(motPasse)) {
                        motPasseExiste = true;
                        utilCourant = fenetre.arEmploye.get(i);
                    }
                }
            }

            if (utilisateurExiste) {
                if (motPasseExiste) {
                    valide = true;
                } else {
                    lblErreur.setText("Le mot de passe est incorrect");
                    txtMotPasse.setText("");
                    txtMotPasse.requestFocusInWindow();
                }
            } else {
                lblErreur.setText("Le nom d'utilisateur est incorrect");
                txtUtilisateur.setText("");
                txtMotPasse.setText("");
                txtUtilisateur.requestFocusInWindow();
            }

            return valide;
            //return true;    //vous n'aurez qu'a peser 2 fois sur "enter" pour vous logger :)
        }
    }

    /**
     * Permet de gérer les entrées clavier sur les composantes concernées de cet écran.
     */
    class GererTouches implements KeyListener {

        public void keyTyped(KeyEvent e) {
        }

        public void keyPressed(KeyEvent e) {
        }

        /**
         * permet de changer le focus d'un champ de texte (JTextField) à un autre grâce à la touche "Entrée".
         * @param e
         * permet d'itentifier la source dans laquelle une touche a étée relâchée.
         */
        public void keyReleased(KeyEvent e) {
            if (e.getSource() == txtUtilisateur) {
                if (e.getKeyCode() == e.VK_ENTER) {
                    txtMotPasse.requestFocusInWindow();
                }
            } else if (e.getSource() == txtMotPasse) {
                if (e.getKeyCode() == e.VK_ENTER) {
                    btnConnecter.doClick();
                }
            }
        }
    }
}
